簡單介紹了很厲害的青梅竹馬
工具人們:所以說人帥又強真好啊....你有看過昨天吵很兇的網路文章嗎?
我:什麼文章?
工具人們:就是一篇叫什麼渣男給不完的promise,那算什麼啊,有沒有想過我們工具人的心情?以為我們自願當工具人?
resolve、reject,自己決定工具人們:在變成工具人前,我其實也會看事情拒絕reject的,像是那種劈頭就獅子大開口的..
const deny = new Promise((resolve,reject)=>{
console.log("你聽過...(?)")
reject("我ok,你先聽");
})
deny;

仔細看會發現有幾個不懂的值,簡單說明:
[[PromiseState]]:回傳Promise狀態[[PromiseResult]]:根據reject或是resolve回傳對應的值工具人們:當你覺得一件事合理可以做時,像是要是有人約你去他家看貓時,合理嘛當然會resolve。
const okDESU = new Promise((resolve,reject)=>{
console.log("要來看我家貓後空翻嗎?");
resolve("真的嗎?好啊好啊")
})

我:那你們是怎麼淪落到今天的啊... 都看過貓了(?)
工具人們:何止呢?我們給過的Promise可不只這樣..
PromisePromise.race阿物件:我先講講我的故事好了,是這樣的,回想我年輕時,那時候認識了三個女生,我甚至還記得她們的名字:sophia,alanna,ray。
function sophia() {
return new Promise((resolve, reject) => {
setTimeout(
() => {
resolve("sophia:跟我交往好嗎!")},
(Math.random() + 1) * 1000
);
});
}
function alanna() {
return new Promise((resolve, reject) => {
setTimeout(
() => {
resolve("alanna說:跟我交往好嗎!")},
(Math.random() + 1) * 1000
);
});
}
function ray() {
return new Promise((resolve, reject) => {
setTimeout(
() =>{
resolve("ray說:跟我交往好嗎!")},
1000
);
});
}
Promise.race([sophia(), alanna(), ray()]).then((isWho) => {console.log(isWho)});
阿物件:因為很渴望交到女朋友,來擺脫魔法師的稱號,所以誰先跟我告白就接受。

最後,看似要脫魯了,結果...
那天Ray說:希望讓她再考慮一下,之後就突然聯絡不上了。
Promise.race公式:
Promise.race(iterable)
輸入值:可迭代值(iterable) ex:string,array
回傳情境:當promise內任一個reject、resolve完成時
回傳值:
- 當輸入值不是
promise時,回傳一個fulfilled的promise,值為第一個不是promise的值- 是
Promise物件時,回傳狀態pending的物件:
a. 皆為resolve:race內容執行完成,最先執行完的值會執行then
b. 任一值為reject,仍會 將race內容都執行完成,但並不會執行then
Promise.all,Promise.allSettled方函式:頭等工具人...指的不只是能力,同時也是一種態度,不然其實我也是很夯的,想當初...
function sophia(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("sophia:跟我交往好嗎!")
resolve("sophia:跟我交往好嗎!")},(Math.random()+1)*1000)
})
}
function alanna(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("alanna說:跟我交往好嗎!")
resolve("alanna說:跟我交往好嗎!")},(Math.random()+1)*1000)
})
}
function ray(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("ray說:跟我交往好嗎!")
resolve("ray說:跟我交往好嗎!")},(Math.random()+1)*1000)
})
}
Promise.all([sophia(),alanna(),ray()]).then((isWho)=>console.log("我拒絕"))

方函式:一次三個女生都跟我告白後,接著我全部都拒絕了,因為我愛的人只有JS。
Promise.all公式:
Promise.all(iterable)
輸入值:可迭代值(iterable) ex:string,array
回傳情境:當全部promise皆resolve時,或一個reject時
回傳值:
- 當輸入值不是
promise時,回傳一個fulfilled的promise,值為第一個非promise- 是
Promise物件時,回傳狀態pending的物件:
a. 皆為resolve:將all內容都執行完成,會執行then
b. 任一為reject,將all內容都執行完成,但並不會執行then
兩者差異:
根據MDN是這樣說的:
In comparison, the Promise returned by Promise.all() may be more appropriate if the tasks are dependent on each other / if you'd like to immediately reject upon any of them rejecting
Promise.all,Promise.allSettled的差別為,如果有reject,all會立刻回傳。
-- to be continued --
那今天就到這邊摟!
每天的休息,是為了後面的追求,明天見。